// pages/edit-phone/edit-phone.ts
import { registerVerify } from '../../../api/user.js';
import { updateBindingPhone } from '../../../api/user.js';
import userManager from '../../../utils/userManager.js';

Page({
  data: {
    currentPhone: '',
    newPhone: '',
    verifyCode: '',
    countdown: 0,
    canSend: true,
    timer: null as any,
  },

  onLoad() {
    // 从缓存加载当前手机号（脱敏显示）
    const displayPhone = userManager.getUserPhone(true);
    this.setData({ currentPhone: displayPhone });
  },

  onUnload() {
    // 页面卸载时清除定时器
    if (this.data.timer) {
      clearInterval(this.data.timer);
    }
  },

  onPhoneInput(e: any) {
    this.setData({ newPhone: e.detail.value });
  },

  onCodeInput(e: any) {
    this.setData({ verifyCode: e.detail.value });
  },

  // 发送验证码
  async sendCode() {
    const phone = this.data.newPhone;
    
    // 验证手机号格式
    if (!phone || phone.length !== 11) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none',
      });
      return;
    }
    
    // 验证手机号格式（中国大陆手机号）
    const phoneReg = /^1[3-9]\d{9}$/;
    if (!phoneReg.test(phone)) {
      wx.showToast({
        title: '手机号格式不正确',
        icon: 'none',
      });
      return;
    }
    
    try {
      wx.showLoading({ title: '发送中...' });
      
      // 调用发送验证码接口
      const res = await registerVerify({
        phone: phone,
        type: 'update' // 修改手机号类型
      });
      
      wx.hideLoading();
      
      if (res.status === 200 || res.code === 200) {
        // 开始倒计时
        this.setData({ countdown: 60, canSend: false });
        
        const timer = setInterval(() => {
          if (this.data.countdown <= 1) {
            clearInterval(timer);
            this.setData({ canSend: true, countdown: 0, timer: null });
          } else {
            this.setData({ countdown: this.data.countdown - 1 });
          }
        }, 1000);
        
        this.setData({ timer });
        
        wx.showToast({
          title: '验证码已发送',
          icon: 'success',
        });
      } else {
        throw new Error(res.msg || '发送失败');
      }
    } catch (error: any) {
      wx.hideLoading();
      console.error('发送验证码失败:', error);
      
      wx.showToast({
        title: typeof(error) === 'string' ? error : (error?.msg || '发送失败，请重试'),
        icon: 'none'
      });
    }
  },

  // 提交修改
  async submitPhone() {
    const { newPhone, verifyCode } = this.data;
    
    // 验证手机号
    if (!newPhone || newPhone.length !== 11) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none',
      });
      return;
    }
    
    // 验证手机号格式
    const phoneReg = /^1[3-9]\d{9}$/;
    if (!phoneReg.test(newPhone)) {
      wx.showToast({
        title: '手机号格式不正确',
        icon: 'none',
      });
      return;
    }
    
    // 验证验证码
    if (!verifyCode) {
      wx.showToast({
        title: '请输入验证码',
        icon: 'none',
      });
      return;
    }
    
    if (verifyCode.length !== 6) {
      wx.showToast({
        title: '请输入6位验证码',
        icon: 'none',
      });
      return;
    }
    
    try {
      wx.showLoading({ title: '保存中...' });
      
      // 调用修改手机号接口
      const res = await updateBindingPhone({
        phone: newPhone,
        code: verifyCode
      });
      
      wx.hideLoading();
      
      if (res.status === 200) {
        // 手机号修改成功，刷新用户信息
        await userManager.refreshAfterUpdate('手机号修改');
        
        wx.showToast({
          title: '手机号修改成功',
          icon: 'success',
        });
        
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      } else {
        throw new Error(res.msg || '修改失败');
      }
    } catch (error: any) {
      wx.hideLoading();
      console.error('修改手机号失败:', error);
      
      wx.showToast({
        title: typeof(error) === 'string' ? error : (error?.msg || '修改失败，请重试'),
        icon: 'none'
      });
    }
  },
});

